% !TEX program = xelatex
% !TEX encoding = utf-8

\section{Faster-RCNN 原理}

\subsection{简介}

\begin{frame}
\frametitle{Faster-RCNN 过程}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.9\paperwidth]{images/总览图}
    \label{Faster-RCNN过程}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{Faster-RCNN 效果}
\begin{figure}[!ht]
    \centering
    \begin{minipage}[c]{0.55\linewidth}
        \centering
        \begin{subfigure}
            \centering
            \includegraphics[width=1.0\linewidth]{images/cow}
        \end{subfigure}
    \end{minipage}
    \begin{minipage}[c]{0.4\linewidth}
        \centering
        \begin{subfigure}
            \centering
            \includegraphics[width=1.0\linewidth]{images/human}
        \end{subfigure}%
        
        \begin{subfigure}
            \centering
            \includegraphics[width=1.0\linewidth]{images/manbus}
        \end{subfigure}
    \end{minipage}
    \caption[]{Faster-RCNN 效果}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{Faster-RCNN 的关键内容}
{\LARGE%
    \begin{enumerate}
        \item 区域推荐网络（Region Proposal Networks） \pause
        \item 感兴趣区域池化（Roi Pooling） \pause
        \item 第二阶段分类与回归（Classification and Regression）
    \end{enumerate}
}
\end{frame}

\subsection{区域推荐网络}

\begin{frame}
\frametitle{Faster-RCNN 的关键内容}
{\LARGE%
    \begin{enumerate}
        \item {\color{red} 区域推荐网络（Region Proposal Networks）}
        \item 感兴趣区域池化（Roi Pooling）
        \item 第二阶段分类与回归（Classification and Regression）
    \end{enumerate}
}
\end{frame}

\subsubsection{检测框与 Anchor}

\begin{frame}
\frametitle{检测框生成}
{\Large 经典方法生成检测框：}
\begin{enumerate}
    \item 滑动窗口 + 图像金字塔
    \item Selective Search 方法生成检测框
\end{enumerate} \pause
{\Large 缺点是十分耗时！}

\vspace{\baselineskip}

{\large 解决方案？？} \pause

\vspace{\baselineskip}

{\Large CNN 的计算很快，结合感受野的概念，在 feature map 中提取 Proposal}
\end{frame}

\begin{frame}
\frametitle{Anchor}
Anchor 是 feature 上根据不同的 scale 和 aspect ratio 构造的矩形。如下图，3 个 scale （$\left\{ L_1^2, L_2^2, L_3^2  \right\}$），3 个 aspect ratio ($ \left\lbrace  1:1,1:2,2:1\right\rbrace$) 构造 9 个 anchors：
\begin{columns}
    \column{0.5\textwidth}
    \begin{figure}[H]
        \includegraphics[width=1.0\columnwidth]{images/anchor}
    \end{figure}
    {\tiny {\color{red} 注意！} 这里为了图形清晰将矩形分开，实际上它们的中心是同一点}。
    
    \column{0.5\textwidth}
    {\Large anchors 的作用：
    \begin{enumerate}
        \item 利用不同的 scale 和 aspect ratio 可以覆盖原图的各个尺度和形状 \pause
        \item 利用网络输出的 Bounding Box 回归信息直接修正检测框位置
    \end{enumerate}}
\end{columns}
\end{frame}

\subsubsection{区域推荐网络}

\begin{frame}
\frametitle{区域推荐网络}
\begin{columns}
    \column{0.5\textwidth}
    \begin{figure}[H]
        \includegraphics[width=1.0\columnwidth]{images/rpn}
    \end{figure} \pause
    
    \column{0.5\textwidth}
    {\large \begin{enumerate}
        \item feature map 中的每一个 feature 对应 $k$ 个 anchor \pause
        \item intermediate layer 输出 $256$ 维的 feature map \pause
        \item cls layer 输出 $2k$ 维的分类信息划分前景和背景
        \item reg layer 输出 $4k$ 维的 Bounding Box 回归信息
    \end{enumerate}}
\end{columns}
\end{frame}

\begin{frame}
\frametitle{判定和回归}
在图 \ref{Faster-RCNN过程} 中具有以下部分：
\begin{figure}[H]
    \includegraphics[width=0.8\paperwidth]{images/proposal}
\end{figure} 
在经过 RPN 网络后具有两条线路： \pause
{\large \begin{enumerate}
    \item 上面的路线接受 cls layer 的输出，使用 softmax 分类判定 foreground 和 background
    \item 下面的路线接受 reg layer 的输出，对预置的 anchors 进行 Bounding Box 回归
\end{enumerate}}
\end{frame}

\subsubsection{Proposal Layer 与 Loss}

\begin{frame}
\frametitle{Proposal Layer}
在图 \ref{Faster-RCNN过程} 中具有以下部分：
\begin{figure}[H]
    \includegraphics[width=0.8\paperwidth]{images/proposal}
\end{figure} 
可以看到具有一个 Proposal layer： \pause
{\large \begin{enumerate}
    \item 接受分类信息和回归信息以及图像信息 \pause
    \item 去除明显错误的 anchors \pause
    \item Non Maximum Suppression \pause
    \item 随机抽取一定数量的 foreground 和 background anchors
\end{enumerate}}
\end{frame}

\begin{frame}
\frametitle{RPN Loss}
接下来根据 Proposal layer 的输出求 loss。定义损失函数，对于每个 anchor:
{\large \begin{enumerate}
    \item 二分类 softmax，有 2 个 score 输出用以表示其是一个物体的概率与不是一个物体的概率 $p_i$
    \item bounding box 的 regressor 输出代表这个 anchor 的 4 个坐标位置 $t_i$
\end{enumerate}} \pause
因此 RPN 的总体 Loss 函数可以定义为：
\begin{equation}
\centering
L(\left\lbrace p_i\right\rbrace\left\lbrace t_i\right\rbrace)=\frac{1}{N_{cls}}\sum_i L_{cls}(p_i,p_i^*)+\lambda\frac{1}{N_{reg}}\sum_i p_i^* L_{reg}(t_i,t_i^*)
\label{rpnloss}
\end{equation}
\end{frame}

\begin{frame}
\frametitle{RPN Loss}
可以看到， RPN 的总体 Loss 分为两部份：
{\large \begin{enumerate}
    \item {$L_{cls}$ 是 RPN 的 cls layer 的前景和背景的分类 Log Loss：
    \[L_{cls}(p_i,p_i^*)=p_i \mathrm{log}p_i^* + p_i^* \mathrm{log}p_i\] } \pause
    \item {$L_{reg}$ 是 RPN 的 reg layer 的 Bounding Box 回归 Loss：
    \[smooth_{l_1}(x)=\left\lbrace 
    \begin{array}{lr}%
    0.5x^2 & |x|<1 \\
    |x| - 0.5 & otherwise
    \end{array}\right.\]}
\end{enumerate}}
\end{frame}

\subsection{感兴趣区域池化}

\begin{frame}
\frametitle{Faster-RCNN 的关键内容}
{\LARGE%
    \begin{enumerate}
        \item 区域推荐网络（Region Proposal Networks）
        \item {\color{red} 感兴趣区域池化（Roi Pooling）}
        \item 第二阶段分类与回归（Classification and Regression）
    \end{enumerate}
}
\end{frame}

\begin{frame}
\frametitle{为何需要 ROI Pooling}
对于传统的 CNN（如 AlexNet，VGG），当网络训练好后输入的图像尺寸必须是固定值，同时网络输出也是固定大小的。如果输入图像大小不定，有 2 种解决办法：
{\large \begin{enumerate}
    \item 从图像中 crop 一部分传入网络
    \item 将图像 warp 成需要的大小后传入网络
\end{enumerate}} \pause
\begin{figure}[H]
    \includegraphics[width=0.8\columnwidth]{images/cropwarp}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{ RoI Pooling 原理}
\begin{enumerate}
    \item 对应 $M\times N$ 尺度的，所以首先使用 spatial\_scale 参数将其映射回 $(M/16)\times(N/16)$ 大小的 feature maps 尺度
    \item 每个 proposal 水平和竖直分为 pooled\_w 和 pooled\_h 份，对每一份都进行 max pooling 处理
\end{enumerate} \pause
\begin{figure}[H]
    \includegraphics[width=0.8\columnwidth]{images/roipooling}
\end{figure}
\end{frame}

\subsection{第二阶段分类与回归}

\begin{frame}
\frametitle{Faster-RCNN 的关键内容}
{\LARGE%
    \begin{enumerate}
        \item 区域推荐网络（Region Proposal Networks）
        \item 感兴趣区域池化（Roi Pooling）
        \item {\color{red} 第二阶段分类与回归（Classification and Regression）}
    \end{enumerate}
}
\end{frame}

\begin{frame}
\frametitle{分类（Classification）}
在图 \ref{Faster-RCNN过程} 最后具有以下部分：
\begin{figure}[H]
    \includegraphics[width=0.9\paperwidth]{images/stage2}
\end{figure} \pause
图中显示连接接 Softmax layer 和 cls\_prob layer 的网络。计算每个 Proposal 具体类别（如人，车，电视等），输出 cls\_prob 概率向量。

\vspace{\baselineskip}

该层的 Loss 计算与 RPN 网络的 cls layer 的方法相同，只是将分类数增加到 $cls\_num + 1$。
\end{frame}

\begin{frame}
\frametitle{回归（Regression）}
在图 \ref{Faster-RCNN过程} 最后具有以下部分：
\begin{figure}[H]
    \includegraphics[width=0.9\paperwidth]{images/stage2}
\end{figure} \pause
具有一个 bbox\_pred layer，再次利用 Bounding Box Regression 获得每个 Proposal 的位置偏移量 bbox\_pred，用于回归更加精确的目标检测框。

\vspace{\baselineskip}

该层的 Loss 计算与 RPN 网络的 reg layer 的方法相同，只是 $t_x, t_y, t_w, t_h$ 由 proposal 和 Ground True 计算得到。
\end{frame}

\subsection{小结}

\begin{frame}
\frametitle{小结}
Faster-RCNN 的要点总结：
{\Large \begin{enumerate}
    \item 不同的 scale 和 aspect ratio 生成 anchor，预置检测框 \pause
    \item RPN 中的分类结果判断是否是对象，坐标回归结果调整 anchor \pause
    \item ROI pooling 使不同 Size 的 Proposal 对应的 feature 同一尺寸 \pause
    \item 第二阶段的类别识别和 Bounding Box 微调
\end{enumerate}}
\end{frame}